package article_api

import (
	"github.com/gin-gonic/gin"
	"github.com/liu-cn/json-filter/filter"
	"giv-vue-blog/global"
	"giv-vue-blog/models"
	"giv-vue-blog/models/res"
	"giv-vue-blog/service/es_ser"
)

type ArticleSearchRequest struct {
	models.PageInfo
	Tag string `json:"tag" form:"tag"`
}

// ArticleListView 文章列表接口
// @Summary 获取文章列表
// @Description 根据条件获取文章列表
// @Tags 文章管理
// @Accept json
// @Produce json
// @Param page query int false "页码数" default(1)
// @Param size query int false "每页数量" default(10)
// @Param tag query string false "标签"
// @Security ApiKeyAuth
// @Success 200 {object} res.Response{}
// @Failure 400 {object} res.Response "参数错误"
// @Failure 401 {object} res.Response "未授权访问"
// @Failure 500 {object} res.Response "内部服务器错误"
// @Router /api/articles [get]
func (ArticleApi) ArticleListView(c *gin.Context) {
	var article ArticleSearchRequest
	if err := c.ShouldBindQuery(&article); err != nil {
		res.FailedWithCode(res.ArgumentError, c)
		return
	}
	list, count, err := es_ser.CommonList(es_ser.Option{
		PageInfo: article.PageInfo,
		Fields:   []string{"title", "content"},
		Tag:      article.Tag,
	})
	if err != nil {
		global.Log.Error(err)
		res.OkWithMsg("查询失败", c)
		return
	}
	//方法二
	//不显示content，它只会把这个内容在界面上渲染为空 因此采用另一种方法 在结构体中content字段后添加omit(list)
	//当在list时会把这个字段给去掉
	//filter.Omit("list", list)
	//json-filter空值问题解决 {}-->[]
	data := filter.Omit("list", list)
	_list, _ := data.(filter.Filter)
	if string(_list.MustMarshalJSON()) == "{}" {
		list = make([]models.ArticleModel, 0)
		res.OkWithList(list, int64(count), c)
		return
	}
	res.OkWithList(data, int64(count), c)
}
